/**
 *  Copyright (C) 2008-2013  Telosys project org. ( http://www.telosys.org/ )
 *
 *  Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *          http://www.gnu.org/licenses/lgpl.html
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.telosys.persistence.mappers;

import java.lang.reflect.Field;

import org.telosys.persistence.TelosysPersistenceException;
import org.telosys.persistence.dao.QueryContext;
import org.telosys.persistence.mapping.DateType;

public class FieldMapperDateUtil extends AbstractFieldMapper // implements SpecializedFieldMapper
{
	private DateType dateType = null ;
	
	public FieldMapperDateUtil( DateType dateType  )
	{
		this.dateType = dateType ;
	}
	
	// @Override
	public void beanToTable( Object bean, Field field, QueryContext queryContext, int index ) throws IllegalAccessException
	{
        //queryContext.setParamDate( index, (java.util.Date) field.get(bean) ); 
        java.util.Date fieldValue = (java.util.Date) field.get(bean) ;
		if ( dateType.isDateOnly() ) {
	        queryContext.setParamDate( index, fieldValue ); 
		}
		else if ( dateType.isTimeOnly() ) {
	        queryContext.setParamTime( index, fieldValue ); 
		}
		else if ( dateType.isDateAndTime() ) {
	        queryContext.setParamTimestamp( index, fieldValue ); 
		}
		else {
			throw new TelosysPersistenceException("Invalid date type for field " + field.getName() );
		}
	}

	// @Override
	public void tableToBean(Object bean, Field field, QueryContext queryContext, int index ) throws IllegalAccessException
	{
		//field.set(bean, queryContext.getResultDate(index) );
		if ( dateType.isDateOnly() ) {
			field.set(bean, queryContext.getResultDate(index) ) ;
		}
		else if ( dateType.isTimeOnly() ) {
			field.set(bean, queryContext.getResultTimeAsDate(index) ) ;
		}
		else if ( dateType.isDateAndTime() ) {
			field.set(bean, queryContext.getResultTimestampAsDate(index) ) ;
		}
		else {
			throw new TelosysPersistenceException("Invalid date type for field " + field.getName() );
		}
	}
	
}
